package view;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

import controller.OpstartController;
import controller.PlanningController;

public class PlanningFrame extends JFrame {
	private final OpstartController opstartController;
	private final PlanningController planningController;
	private String cursus;
	private String lector;
	private String lokaal;
	private String dag;
	private String tijdstip;
	private String aantalPlaatsen;
	private String lesduur;
	private final JLabel lblGepland, lblLectorVoorkeur;
	private final JLabel lblStatusPlanning;
	private final JButton btnRegistratie;
	private final JComboBox cmbCursussen, cmbLectoren, cmbLokalen, cmbDagen, cmbUren;
	private final JComboBox cmbMinuten;
	private final JComboBox cmbPlaatsen;

	public PlanningFrame(OpstartController opstartController, PlanningController planningsController) {
		super("Planning cursussen schooljaar 2011-2012");
		this.opstartController = opstartController;
		this.planningController = planningsController;
		Container container = getContentPane();
		container.setBackground(Color.YELLOW);
		container.setLayout(null);

		// cursussen - Deze moeten ingelezen worden uit de cursussen container!!!
		String[] cursussen = planningController.getCursussen();
		cmbCursussen = new JComboBox(cursussen);
		JLabel lblCursussen = new JLabel("Selecteer een cursus");
		lblCursussen.setBounds(20, 20, 300, 30);
		cmbCursussen.setBounds(20, 50, 300, 30);

		// cursusoverzicht
		lblGepland = new JLabel(getReedsGeplandTekst());
		lblGepland.setBounds(400, 20, 500, 30);
		final JTextArea txtGepland = new JTextArea(10, 50);
		txtGepland.setTabSize(2);
		txtGepland.setText(getPlanningOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
		txtGepland.setBounds(400, 50, 600, 100);
		txtGepland.setEditable(false);

		// lectoren - Deze moeten ingelezen worden uit de lectoren container!!!
		String[] lectoren = planningController.getLectoren();
		cmbLectoren = new JComboBox(lectoren);
		JLabel lblLectoren = new JLabel("Selecteer een lector");
		lblLectoren.setBounds(20, 150, 300, 30);
		cmbLectoren.setBounds(20, 180, 300, 30);

		// lectorenoverzicht
		lblLectorVoorkeur = new JLabel(getLectorVoorkeurTekst());
		lblLectorVoorkeur.setBounds(400, 150, 500, 30);
		final JTextArea txtLectorVoorkeur = new JTextArea(10, 50);
		txtLectorVoorkeur.setText(getLectorOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
		txtLectorVoorkeur.setBounds(400, 180, 600, 100);
		txtLectorVoorkeur.setEditable(false);

		// lokalen - Deze moeten ingelezen worden uit de lokalen enumeration!!!
		String[] lokalen = planningController.getLokalen();
		cmbLokalen = new JComboBox(lokalen);
		JLabel lblLokalen = new JLabel("Selecteer een lokaal");
		lblLokalen.setBounds(20, 280, 300, 30);
		cmbLokalen.setBounds(20, 310, 300, 30);

		// dag
		String[] dagen = { "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" };
		cmbDagen = new JComboBox(dagen);
		cmbDagen.setMaximumRowCount(6);
		JLabel lblDag = new JLabel("Selecteer dag");
		lblDag.setBounds(20, 350, 200, 30);
		cmbDagen.setBounds(20, 380, 100, 30);
		// aanvangsuur cursus - Een cursus kan starten op het uur of het haluur - dynamisch
		// aanpassen aan lesdag
		String[] uren = { "17.00", "17.30", "18.00", "18.30", "19.00", "19.30", "20.00" };
		cmbUren = new JComboBox(uren);
		cmbUren.setMaximumRowCount(7);
		JLabel lblTijd = new JLabel("Selecteer aanvangsuur");
		lblTijd.setBounds(220, 350, 300, 30);
		cmbUren.setBounds(220, 380, 80, 30);
		// aantal beschikbare plaatsen
		String[] plaatsen = { "10", "15", "20", "25" };
		cmbPlaatsen = new JComboBox(plaatsen);
		cmbPlaatsen.setMaximumRowCount(4);
		JLabel lblPlaatsen = new JLabel("Beschikbare plaatsen");
		lblPlaatsen.setBounds(420, 350, 300, 30);
		cmbPlaatsen.setBounds(420, 380, 80, 30);
		// Duur
		String[] Minuten = { "120", "240" };
		cmbMinuten = new JComboBox(Minuten);
		cmbMinuten.setMaximumRowCount(2);
		JLabel lblMinuten = new JLabel("Lesduur in minuten:");
		lblMinuten.setBounds(620, 350, 300, 30);
		cmbMinuten.setBounds(620, 380, 80, 30);

		// registratieknop
		btnRegistratie = new JButton(getRegistratieTekst());
		btnRegistratie.setBounds(20, 440, 1000, 30);
		// statusPlanning
		lblStatusPlanning = new JLabel();
		lblStatusPlanning.setForeground(Color.RED);
		lblStatusPlanning.setBounds(20, 500, 810, 30);

		container.add(lblCursussen);
		container.add(cmbCursussen);
		container.add(lblLectoren);
		container.add(cmbLectoren);
		container.add(lblLokalen);
		container.add(cmbLokalen);
		container.add(lblDag);
		container.add(cmbDagen);
		container.add(lblTijd);
		container.add(cmbUren);
		container.add(lblPlaatsen);
		container.add(cmbPlaatsen);
		container.add(lblMinuten);
		container.add(cmbMinuten);
		container.add(lblGepland);
		container.add(txtGepland);
		container.add(lblLectorVoorkeur);
		container.add(txtLectorVoorkeur);
		container.add(btnRegistratie);
		container.add(lblStatusPlanning);

		// eventhandlers
		cmbCursussen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
				lblGepland.setText(getReedsGeplandTekst());
				txtGepland.setText(getPlanningOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
				lblLectorVoorkeur.setText(getLectorVoorkeurTekst());
				txtLectorVoorkeur.setText(getLectorOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
			}
		});
		cmbLectoren.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
			}
		});
		cmbLokalen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
			}
		});
		cmbDagen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());

			}
		});

		cmbUren.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
			}
		});

		cmbPlaatsen.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
			}
		});

		cmbMinuten.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent event) {
				btnRegistratie.setText(getRegistratieTekst());
			}
		});

		btnRegistratie.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				planningController.registreerCursus(cmbCursussen.getSelectedItem().toString(), cmbLectoren
						.getSelectedItem().toString(), cmbLokalen.getSelectedItem().toString(), cmbDagen
						.getSelectedItem().toString(), cmbUren.getSelectedItem().toString(), cmbPlaatsen
						.getSelectedItem().toString(), cmbMinuten.getSelectedItem().toString());
				txtGepland.setText(getPlanningOverzichtTekst(cmbCursussen.getSelectedItem().toString()));
			}
		});
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				setVisible(false);
				toonMenu();
			}
		});
		this.setSize(1100, 750);

	}

	private void toonMenu() {
		opstartController.execute();
	}

	private String getRegistratieTekst() {
		cursus = " " + cmbCursussen.getSelectedItem();
		lector = " " + cmbLectoren.getSelectedItem();
		lokaal = " " + cmbLokalen.getSelectedItem();
		dag = " " + cmbDagen.getSelectedItem();
		tijdstip = " " + cmbUren.getSelectedItem();
		aantalPlaatsen = " " + cmbPlaatsen.getSelectedItem();
		lesduur = " " + cmbMinuten.getSelectedItem();
		return "Registreer:" + " CURSUS:" + cursus + "\n" + "   LECTOR:" + lector + "   LOKAAL:" + lokaal + "   DAG:"
				+ dag + "   AANVANG:" + tijdstip + "   PLAATSEN:" + aantalPlaatsen + "   LESDUUR:" + lesduur + "min.";

	}

	private String getPlanningOverzichtTekst(String cursusnaam) {
		return planningController.getGeplandeCursussen(cursusnaam);
	}

	private String getReedsGeplandTekst() {
		return "Overzicht reeds geplande cursussen voor " + cmbCursussen.getSelectedItem();
	}

	private String getLectorOverzichtTekst(String cursusnaam) {
		return planningController.getvoorkeurLectoren(cursusnaam);
	}

	private String getLectorVoorkeurTekst() {
		return "Overzicht beschikbare lectoren met voorkeur voor " + cmbCursussen.getSelectedItem();
	}

	public static void main(String[] args) {
		// PlanningFrame pl = new PlanningFrame(new OpstartController());
		// pl.setVisible(true);
	}
}
